---
title: コンテキスト管理
description: Learn how to provide local data via RunContext and expose context to the LLM
---

import { Aside, Code } from '@astrojs/starlight/components';
import localContextExample from '../../../../../../examples/docs/context/localContext.ts?raw';

コンテキストは多義的な用語です。気にすべきコンテキストには主に 2 つのクラスがあります:

1. **ローカルコンテキスト**: 実行中にコードがアクセスできるもの。ツールに必要な依存関係やデータ、`onHandoff` のようなコールバック、ライフサイクルフックなど
2. **エージェント/LLM コンテキスト**: 応答を生成する際に言語モデルが参照できるもの

## ローカルコンテキスト

ローカルコンテキストは `RunContext<T>` 型で表現されます。状態や依存関係を保持する任意のオブジェクトを作成し、それを `Runner.run()` に渡します。すべてのツール呼び出しやフックは `RunContext` ラッパーを受け取り、そのオブジェクトを読み書きできます。

<Code
  lang="typescript"
  code={localContextExample}
  title="ローカルコンテキストの例"
/>

単一の実行に参加するすべてのエージェント、ツール、フックは同じコンテキストの**型**を使用する必要があります。

ローカルコンテキストの用途:

- 実行に関するデータ（ユーザー名、ID など）
- ロガーやデータフェッチャーなどの依存関係
- ヘルパー関数

<Aside type="note">
  コンテキストオブジェクトは LLM
  に**送信されません**。純粋にローカルであり、自由に読み書きできます。
</Aside>

## エージェント/LLM コンテキスト

LLM が呼び出されると、参照できるのは会話履歴からのデータだけです。追加情報を利用可能にするには、いくつかの方法があります:

1. エージェントの `instructions` に追加する（system または developer メッセージとも呼ばれます）。これはコンテキストを受け取って文字列を返す関数、または静的な文字列にできます
2. `Runner.run()` を呼び出す際の `input` に含める。instructions の手法に似ていますが、メッセージを [指揮系統](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command) の下位に配置できます
3. 関数ツール経由で公開し、LLM がオンデマンドでデータを取得できるようにする
4. リトリーバルや Web 検索ツールを使い、ファイル、データベース、または Web の関連データに基づいて応答をグラウンディングする
